package com.gxa.hualianeshop.controller;

import com.gxa.hualianeshop.common.base.R;
import com.gxa.hualianeshop.common.base.RedisKeys;
import com.gxa.hualianeshop.common.base.ResultCode;
import com.gxa.hualianeshop.common.exception.BizException;
import com.gxa.hualianeshop.component.ActiveMQProducer;
import com.gxa.hualianeshop.component.RabbitMQProducer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.concurrent.TimeUnit;

/**
 * 客户端请求生成订单时，首先需要申请一个唯一的 Token。可以使用 UUID 或其他唯一标识生成算法来生成 Token。
 * 客户端将该 Token 作为参数发送到后端服务。
 *
 * 后端服务接收到请求后，首先检查该 Token 是否已经存在于 Redis 中。
 * 可以使用 Redis 的 SETNX 命令来实现，如果返回 1 表示设置成功，即 Token 不存在，可以继续处理订单:写入消息队列；
 * 如果返回 0 表示设置失败，即 Token 已存在，说明该订单已经被处理过，需要阻止重复生成订单。
 * @author bill
 * @date 2023/7/10 9:21
 */
@RestController
@RequestMapping("/order")
public class OrderController {


    @Autowired
    private ActiveMQProducer activeMQProducer;

    @Autowired
    private RabbitMQProducer rabbitMQProducer;

    @Autowired
    private RedisTemplate<String,Object> redisTemplate;

    @PostMapping("/create")
    public R create(String orderId, HttpServletRequest request){

        // 获取securityToken
      //  String securityToken = request.getHeader("securityToken");

        // 获取用户的编号
     //   String userId = request.getParameter("userId");

        // 准备写入redis
     /*   Boolean success = redisTemplate.opsForValue().setIfAbsent(RedisKeys.SECURITY_TOKEN + orderId, securityToken, 5, TimeUnit.MINUTES);
        if(!success){
            throw new BizException(ResultCode.REPEAT_CREATE_ORDER);
        }*/

//        通过ActiveMQProducer写入订单id
     //   activeMQProducer.sendObjectMessage("orderId",orderId);



        rabbitMQProducer.send(orderId);
        return R.ok();
    }


}
